using System;
using System.Numerics;
using System.Text.Json;
using OracleInternal.Json.Sql;

namespace OracleInternal.Json.Common
{
	internal interface IOracleJsonGenerator
	{
		IOracleJsonGenerator WriteStartObject();

		IOracleJsonGenerator WriteStartObject(string key);

		IOracleJsonGenerator WriteStartArray();

		IOracleJsonGenerator WriteStartArray(string key);

		IOracleJsonGenerator WriteKey(string key);

		IOracleJsonGenerator Write(OracleJsonValue value);

		IOracleJsonGenerator Write(string key, OracleJsonValue value);

		IOracleJsonGenerator Write(string value);

		IOracleJsonGenerator Write(string key, string value);

		IOracleJsonGenerator Write(decimal value);

		IOracleJsonGenerator Write(string key, decimal value);

		IOracleJsonGenerator Write(BigInteger value);

		IOracleJsonGenerator Write(string key, BigInteger value);

		IOracleJsonGenerator Write(int value);

		IOracleJsonGenerator Write(string key, int value);

		IOracleJsonGenerator Write(long value);

		IOracleJsonGenerator Write(string key, long value);

		IOracleJsonGenerator Write(double value);

		IOracleJsonGenerator Write(string key, double value);

		IOracleJsonGenerator Write(float value);

		IOracleJsonGenerator Write(string key, float value);

		IOracleJsonGenerator Write(bool value);

		IOracleJsonGenerator Write(string key, bool value);

		IOracleJsonGenerator Write(DateTime value);

		IOracleJsonGenerator Write(string key, DateTime value);

		IOracleJsonGenerator Write(Period value);

		IOracleJsonGenerator Write(string key, Period value);

		IOracleJsonGenerator Write(TimeSpan value);

		IOracleJsonGenerator Write(string key, TimeSpan value);

		IOracleJsonGenerator Write(byte[] value);

		IOracleJsonGenerator WriteId(byte[] value);

		IOracleJsonGenerator Write(string key, byte[] value);

		IOracleJsonGenerator WriteNull();

		IOracleJsonGenerator WriteNull(string key);

		IOracleJsonGenerator WriteEnd();

		IOracleJsonGenerator WriteParser(Utf8JsonReader parser);

		void Close();

		void Flush();
	}
}
